const arr = [3, 2, 1, 3, 1, 2, 3, 5, 5, 4, 3, 6, 5, 4, 7, 3];

// Object
// function unique(array) {
//   const container = {};
//   return array.filter((i) => {
//     if (container[i]) {
//       return false;
//     } else {
//       container[i] = true;
//       return true;
//     }
//   });
// }

// indexOf  filter
// function unique(array) {
//   return array.filter((ele, i) => array.indexOf(ele) === i);
// }

// Set
// function unique(array) {
//   return Array.from(new Set(array));
// }

// 先排序，然后去掉相邻的
// function unique(array) {
//   array.sort((a, b) => a - b);
//   const result = [];
//   let pre = 0;
//   for (let i = 0; i < array.length; i++) {
//     if (!pre || array[i] !== array[pre]) {
//       result.push(arr[i]);
//     }
//     pre = i;
//   }
//   return result;
// }

// 重复的全被去掉
// lastIndexOf 倒序遍历，但返回的是正序下标，和indexOf返回一样
function unique(array) {
  return array.filter(i => array.indexOf(i) === array.lastIndexOf(i))
}

let wm = new WeakMap(); // key销毁的时候，obj也会销毁
let wm = new Map();
const key = {}
function fn() {
  const obj = {a: 1};
  wm.set(key, obj)
}
fn();
console.log(wm.get(key))